package com.huida.app.hutoolsusage;

import cn.hutool.core.lang.ObjectId;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * @author wangzhuangzhuang
 * @DESC:
 * @date 2022-01-11 09:35
 */
@SpringBootTest
public class IdUtilUsageDemo {


	/**
	 * 唯一ID工具生成器的工具类 - IdUtil
	 * */

	/**
	 * UUID
	 * ObjectId(MongoDB)
	 * Snowflake(Twitter)
	 * */

	/**
	 * UUID全称通用唯一识别码（universally unique identifier),
	 * */
	@Test
	public void test01(){
		// 生成的UUID是带有[-]的字符串
		String uuid01 = IdUtil.randomUUID();
		// uuid01: a6decad0-3a88-430b-9014-bf0fd07cc175
		System.out.println("uuid01: " + uuid01);

		// 生成的是不带[-]的字符串
		String uuid02 = IdUtil.simpleUUID();
		// uuid02: c9153915c0444bab8d5d83c8ea0635dc
		System.out.println("uuid02: " + uuid02);
	}

	/**
	 * ObjectId是MongoDB数据库的一种唯一ID生成策略，是UUID version1的变种
	 * Hutool针对cn.hutool.core.lang.ObjectId快捷创建方法为：
	 * */
	@Test
	public void test02(){
		// next: 61dce0f8070fb5682b4e88eb
		String next = ObjectId.next();
		System.out.println("next: " + next);

		// s: 61dce0f8070fb5682b4e88ec
		String s = IdUtil.objectId();
		System.out.println("s: " + s);
	}

	/**
	 * Snowflake 分布式系统中，使用全局唯一ID的场景
	 * */
	@Test
	public void test03(){
		// 参数1为终端ID
		// 参数2为数据中心ID
		Snowflake snowflake = IdUtil.getSnowflake(1, 1);
		long l = snowflake.nextId();
		System.out.println("l: " + l); // l: 1480717688677470208
	}


}